package com.tfjybj.itoo.teach.provider.service;

import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.dmsdbj.itoo.tool.business.ItooResult;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.teach.entity.TeachClassEntity;
import com.tfjybj.itoo.teach.model.FaceToFaceModel;
import com.tfjybj.itoo.teach.model.StudentModel;
import com.tfjybj.itoo.teach.model.TeachClassModel;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;


/**
 * TeachClassService接口
 * teachClass表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
public interface TeachClassService extends BaseServicePlus<TeachClassEntity> {
	
	//region 模板生成：模糊查询
	/**
     * 根据上课班名称模糊查询teachClass
     *
     * @param name  上课班名称
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的teachClass
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    PageInfo<TeachClassModel> queryByLikeName(String name, Integer pageNo, Integer pageSize);
	//endregion



    /* **********************************以下为非模板生成的内容********************************* */
    /**
     * 分页根据关键词模糊查询上课班code和上课班名称
     *
     * @param teachClassCode  上课班code
     * @param teachClassName  上课班名称
     * @param schoolYear      学期学年
     * @param pageNo          页码
     * @param pageSize        页数
     * @return TeachClassModel
     * @author 严文文
     * @since 2.0.0 2018-11-19 21:08:06
     */
    PageInfo<TeachClassModel>  queryTeachClassInfoByCodeAndNameStrLike(String teachClassCode, String teachClassName, String schoolYear, Integer pageNo, Integer pageSize);

    /**
     * 分页根据关键词模糊查询上课班code和上课班名称
     *
     * @param teachClassCode 上课班code
     * @param teachClassName 上课班名称
     * @return
     * @author 严文文
     * @since 2.0.0 2018-11-19 21:08:06
     */
    List<TeachClassModel>  queryTeachClassInfoByCodeAndNameStrLike(String teachClassCode, String teachClassName);
    /**
     * 导出-根据代码名称上课班模糊查询teachclassmodel
     *
     * @param response 回复
     * @param code 上课班代码
     * @param name 上课班名称
     * @return ItooResult
     * @author 严文文
     * @since 2.0.0 2 2018-11-23 16:32:15
     */
    ItooResult teachClassExport(HttpServletResponse response, String code, String name);
    /**
     * 根据上课班ID查询剩余容量
     *
     * @param teachClassId 上课班id
     * @return int
     * @author 严文文
     * @since 2.0.0 2 2018-11-14 14:43:03
     */
    int queryRemCapacityByTeachClassId(String teachClassId);

    /**
     * 更新上课班ID更新剩余容量
     * @param teachClassId  上课班ID
     * @param remCapacity   剩余容量
     * @return int
     * @author 严文文
     * @since 2.0.0 2 2018-11-14 14:43:03
     */
    int updateRemCapacityByTeachClassId(String teachClassId, int remCapacity);

    /**
     * 根据上课班code查询code是否存在
     *
     * @param teachClassCode 上课班code
     * @return Integer
     * @author 严文文
     * @since 2.0.0 2 2018-11-19 15:51:55
     */
    Integer queryIsExitTeachClassCode(String teachClassCode);

    /**
     * 根据上课班名称查询该名称是否存在
     *
     * @param teachClassName 上课班名称
     * @return String
     * @author 严文文
     * @since 2.0.0 2 2018-11-19 15:51:55
     */
    String queryIsExitTeachClassName(String teachClassName);

    /**
     * 依据策略生成上课班名称  2017年11月3日
     *
     * @param grade      年级
     * @param courseName 课程名称
     * @return 上课班名称
     * @author 严文文
     */
    String findTeachClassName(String grade, String courseName);

    /**
     *根据上课班id查询学生相关信息
     *
     * @param teachClassId 上课班id
     * @param pageNum  页码
     * @param pageSize  页数
     * @return StudentModel
     * @author 严文文
     * @since 2.0.0 2018-11-17 22:05:23
     */
    PageInfo<StudentModel> queryStudentInfoByTeachClassId(String teachClassId, Integer pageNum, Integer pageSize);

    /**
     * 下载上课班信息模板，批量导入使用
     *
     * @param response  回复
     * @return boolean
     * @author 严文文
     * @since 2.0.0 2018-11-25 16:51:36
     */
    boolean downLoadTeachClassTemplate(HttpServletResponse response);

    /**
     * 批量导入上课班信息
     * @param multipartFile  多文件
     * @param request  请求
     * @param response  回复
     * @return ItooResult
     * @author 严文文
     * @since 2.0.0 2018-11-25 16:51:36
     */
    ItooResult importTeachClassByTemplate(MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response);

    /**
     * 查询是否存在该上课班代码
     * @param code 上课班代码
     * @return Integer
     * @author 严文文
     * @since 2.0.0 2018-11-26 11:33:18
     */
    Integer findCodeIsExist(String code);



    /**
     * 根据上课班code查询上课班信息
     *
     * @param teachClassCode 上课班code
     * @return TeachClassModel
     * @author 严文文
     * @since 2.0.0 2018-11-27 15:30:58
     */
    List<TeachClassModel>  findteachClassByCode(String teachClassCode);

    /**
     * 根据课程ID和上课班code 查询上课班信息
     * @param courseId  课程ID
     * @param teachClassCode  上课班code
     * @return String
     * @author 严文文
     * @since 2.0.0 2018-11-27 15:30:58
     */
    String  findIdIsExist(String courseId, String teachClassCode);


    /**
     * 根据ID导出上课班信息
     *
     * @param response  回复
     * @param idList 上课班ID集合
     * @return ItooResult
     * @author 严文文
     * @since 2.0.0 2018-11-25 16:51:36
     */
     ItooResult exportAllByIds(HttpServletResponse response, List<String> idList);


    /**
     * 根据上课班ID查询上课班详情
     *
     * @param idList 上课班ID
     * @return TeachClassModel
     * @author 严文文
     * @since 2.0.0 2018-11-28 09:15:39
     */
    List<TeachClassModel>  queryTeachClassInfoByIds(List<String> idList);

    /**
     * 根据条件导出上上课班信息
     *
     * @param response 回复
     * @param schoolYear 学期学年
     * @param code 上课班code
     * @param name 上课班名名称
     * @return ItooResult
     * @author 严文文
     * @since 2.0.0 2018-11-28 09:15:39
     */
    ItooResult exportByStrLike(HttpServletResponse response, String schoolYear, String code, String name);

    /**
     * 导出-导入失败的数据
     *
     * @param response  响应
     * @param errorListId 为成功导入的分组id
     * @return  boolean
     * @author 严文文
     * @since 2018-12-2 15:08:35
     */
    boolean downErrorList(String errorListId, HttpServletResponse response);

    /**
     * 模糊查询schoolYear, code, name
     * @param schoolYear  学期学年
     * @param code  上课班code
     * @param name  上课班名称
     * @return TeachClassModel
     * @author 严文文
     * @since 2.0.0 2018-11-28 09:15:39
     */
    List<TeachClassModel> queryByStrLike(String schoolYear, String code, String name);


    /**
     * 校验code是否存在
     * @param code 上课班code
     * @return Boolean
     * @author 胡泽宽
     * @since 2.0.0 2018年11月30日 10:54:46
     */
    Boolean checkbycode(String code);

    /**
     * 校验上课班名称
     * @param name  上课班名称
     * @return Boolean
     * @author 胡泽宽
     * @since 2.0.0 2018年11月30日 11:24:38
     */
    boolean checkbyname(String name);

    /**
     * 校验上课班code编辑
     * @param code 上课班code
     * @return TeachClassEntity
     * @author 胡泽宽
     * @since 2.0.0 2018年12月1日 19:02:28
     */
    TeachClassEntity queryBycode(String code);

    /**
     * 校验上课班name编辑
     * @param name 上课班name
     * @return TeachClassEntity
     * @author 胡泽宽
     * @since 2.0.0 2018年12月1日 19:02:28
     */
    TeachClassEntity queryByname(String name);

    /**
     * 分页查询所有TeachClass,包括课程code和name
     *
     * @return TeachClassModel
     * @author 严文文
     * @since 2.0.0 2018-11-08 19:34:10
     */
    PageInfo<TeachClassModel> queryAll(Integer pageNo, Integer pageSize);

    /**
     * 根据上课班code和课程ID查询是否有对应的记录
     * @param code 上课班code
     * @param courseId 课程ID
     * @return TeachClassModel
     * @author 严文文
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<TeachClassModel>  findTeachClassByCodeAndCourseId(String code, String courseId);

    /**
     * 面对面建组
     * @param faceToFaceModel 分组学生实体
     * @return ItooResult 组内人员信息
     * @author 郄子硕
     * @since  2019-2-24 15:44:27
     */
    ItooResult faceToFaceAddClass(FaceToFaceModel faceToFaceModel);

    /**
     * 确认分组后，获取组id
     * @return ItooResult
     * @author 郄子硕
     * @since  2019-2-24 15:44:27
     */
    ItooResult insertClassInfo();

    /**
     * 填写分组信息，更新分组信息
     * @return ItooResult
     * @author 郄子硕
     * @since  2019-2-24 15:44:27
     */
    ItooResult updateClassInfo(TeachClassEntity teachClassEntity);


    /**
     * 确认建组，将组内所有人员添加到库里
     * @param faceToFaceModel
     * @return ItooResult
     * @author 郄子硕
     * @since  2019-2-24 15:44:27
     */
//    ItooResult confirmCreateGroup(List<GroupStudentEntity> groupStudentEntityList);
    ItooResult confirmCreateClass(FaceToFaceModel faceToFaceModel);

    String addClassByCode();
}
